package pattern;

/**
 * 
 * @author jiejie
 *
 */
/**
 * 简单工厂:
 * 工厂角色:这是简单工厂模式的核心，由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用，创建所需要的产品对象。一般而言，工厂类提供一个静态方法
 * ，外部程序通过该方法创建所需对象。
 * 抽象产品角色(如一个接口):简单工厂模式所创建的是所有对象的父类。注意，这里的父类可以是接口也可以是抽象类，它负责描述所创建实例共有的公共接口。
 * 具体产品角色:简单工厂所创建的具体实例对象，这些具体的产品往往都拥有共同的父类。
 *	在jdk中有应用:
 *	1,DriverManager 不用关心客户使用哪种数据库
 *	2,Class.forName()不用关心你使用哪个类
 */
public class SimpleFactory {
	public static void main(String[] args) {
		Car car=SimpleFactory.getCar("c");
		//实例不关心是谁的实例,只要是这种产品就行
		car.drive();
	}
	/**
	 * <pre>
	 * 	name is A or a don't care upcase or lowercase
	 * </pre>
	 * @param name
	 * @return
	 */
	public static Car getCar(String name){
		switch (name.toUpperCase()) {
		case "A":
			return new CarA();
		case "B":
			return new CarB();
		default:
			throw new RuntimeException(String.format("could not find this car name is %s", name));
		}
	}
}

interface Car {
	void drive();
}

class CarA implements Car {

	@Override
	public void drive() {
		System.out.println("carA drive");

	}

}

class CarB implements Car {

	@Override
	public void drive() {
		System.out.println("carB drive");

	}

}
